package com.rc.saas.mini.utils;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

/**
 * Jdk中两个jar需要替换local_policy.jar和US_export_policy.jar，解除密钥长度的限制,解决Illegal key size异常。
 * @author wangzhengwei
 * @create 2021/5/7
 *
 */
public class AESEncrypter {
    //加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式，key需要为16位
    private static String password = "w2vCMZzPIvXLWaoe";

    //1.8版本：
    //http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
    //如果安装了JDK，将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件
    //然后，再重启一下服务器就好了

    /**
     * 解密器
     * @param content
     * @return
     * @throws Exception
     */
    //public static byte[] decrypt(byte[] content) throws Exception {
    //    // 创建AES 秘钥
    //    SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES/ECB/PKCS5Padding");
    //    // 创建密码器
    //    Cipher cipher = Cipher.getInstance("AES");
    //    // 初始化解密器
    //    cipher.init(Cipher.DECRYPT_MODE, key);
    //    // 解密
    //    return cipher.doFinal(content);
    //}

    /**
     * 加密器
     * @param content
     * @return
     * @throws Exception
     */
    //public static byte[] encrypt(String content) throws Exception {
    //    // 创建AES 秘钥
    //    SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES/ECB/PKCS5Padding");
    //    // 创建密码器
    //    Cipher cipher = Cipher.getInstance("AES");
    //    // 初始化加密器
    //    cipher.init(Cipher.ENCRYPT_MODE, key);
    //    // 加密
    //    return cipher.doFinal(content.getBytes("UTF-8"));
    //}

    /**
     * 加密器
     * @param content
     * @return
     * @throws Exception
     */
    public static byte[] encrypt(String content) throws Exception {
        // 创建AES秘钥
        SecretKeySpec key = new SecretKeySpec(password.getBytes("utf-8"), "AES");
        // 创建密码器
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
        // 初始化加密器
        cipher.init(Cipher.ENCRYPT_MODE, key);
        // 加密
        return cipher.doFinal(content.getBytes("UTF-8"));
    }

    public static void main(String[] args) throws Exception {
        String aa = "ABC123";
        //new DESedeKeySpec(a.getBytes("UTF-8"))
        byte[] bb = encrypt(aa);
        //aa.getBytes("UTF-8");
        System.out.println("加密后:" + bb);
        //System.out.println("解密后:" + decrypt(bb));
        //System.out.println("加密后:" + encrypt(new DESedeKeySpec(aa.getBytes("UTF-8"))));
    }
}
